/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;
import javax.swing.JOptionPane;
import model.Cliente;
import model.Cliente;
import model.ClientePK;
import model.LocalizaEstado;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateUtil;

/**
 *
 * @author JONATAS
 */
public class ClienteDAO {

    private Session session;
    // método construtor - igual ao nome da Cliente precedido por public

    public ClienteDAO() {
        session = HibernateUtil.getSessionFactory().openSession();
    }

    public void insert(Cliente m) {
        Transaction t = session.beginTransaction();
        session.save(m);
        t.commit();
    }

    public void update(Cliente m) {
        Transaction t = session.beginTransaction();
        session.merge(m);
        t.commit();
    }

    public void delete(Cliente m) {
        Transaction t = session.beginTransaction();
        session.delete(m);
        t.commit();
    }

    public Cliente findById(ClientePK id) {
        Cliente client = new Cliente(); 
        client = (Cliente) session.load(Cliente.class, id);       
        return (Cliente) session.load(Cliente.class, id);
        
    }

    public List<Cliente> findAll() {
        try {
            return session.createCriteria(Cliente.class).list(); // faz um select * from marca       
        } catch (java.lang.NullPointerException ex) {
            System.out.println("CATCH NULL");
            return null;
        }
    }

    public List<Cliente> findByDescricao(String descricao) {

        Query q = session.createQuery("from Cliente where upper(nomeCompleto) like upper(:X)");
        q.setParameter("X", "%" + descricao + "%");
        return q.list();
    }

    public int contarProjetosDoCliente(Cliente cliente) {

        Query q = session.createQuery("select cast(count(pro_id) as integer) from Projeto where cliente_cpf_cnpj = :cnpj and cliente_tipopessoa = :tipoPessoa and pro_status <> -1");
        q.setParameter("cnpj", cliente.getCpf_cnpj());
        q.setParameter("tipoPessoa", cliente.getTipoPessoa());
        return (int) q.uniqueResult();
    }
    
    public List<Cliente> findCustomizado(String condicaoWhere) {

        Query q = session.createQuery("from Cliente where "+condicaoWhere);        
        return q.list();
    }
}
